package kr.co.bettersoft.pushchat.activity;

import java.util.List;
import java.util.Locale;

import kr.co.bettersoft.pushchat.common.CommonConstant;

import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningAppProcessInfo;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.util.Log;
import android.view.Window;

/**
 * IntroActivity
 * 
 * 인트로 액티비티
 * 
 *  최초로 실행되는 액티비티.
 *   인증여부를 확인해서 인증 액티비티로 보낼지, 로그인 액티비티로 보낼지 여부를 판단함. (자동 로그인은 로그인 액티비티에서 처리하는 걸로)
 *   
 *  추후 로딩 화면 구현시 인트로 화면을 배경으로 깔고 2초간 대기 후 로그인 화면으로 이동
 * 
 */
public class IntroActivity extends Activity {
	///////////////////////////////////////////////////////////////////////////////////////////////
	// 변수

	public String TAG = "IntroActivity";

	SharedPreferences sharedPrefCustom;	// 공용 프립스	

	// 실행중인지 확인
	RunningAppProcessInfo runningappprocessinfo = new RunningAppProcessInfo();
	public static int count = 0;

	Intent intent;

	///////////////////////////////////////////////////////////////////////////////////////////////////

	@Override
	public void onCreate(Bundle savedInstanceState) {
		Log.w(TAG, "IntroPage onCreate");
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE );	// 타이틀바 제거
		setContentView(R.layout.intro_activity);

		// 통신 체크
		ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
		NetworkInfo ni = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
		if(ni!=null){
			boolean isWifiAvail = ni.isAvailable();
			boolean isWifiConn = ni.isConnected();
			ni = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
			boolean isMobileAvail = ni.isAvailable();
			boolean isMobileConn = ni.isConnected();
			String status = "WiFi Avail = " + isWifiAvail + "// WiFi Conn = "
			+ isWifiConn + "// Mobile // Avail = " + isMobileAvail
			+ "// Conn = " + isMobileConn;
		}
		//		Log.d(TAG,"status:"+status);

		sharedPrefCustom = getSharedPreferences(CommonConstant.prefName,
				Context.MODE_WORLD_READABLE | Context.MODE_WORLD_WRITEABLE);

		count = 0;		// 버그 수정용 초기화

		// 결과는 true 가 나오며, 주 목적은 이미 실행중인지 확인하는 것이다. // 실행중인지 확인한다.
		isRunningProcess(this, CommonConstant.packageNames);		

		// 중복 실행을 방지한다.
		if(count==1){		// 최초 실행 	

			// 시작. 검사를 통해 다음 진로 결정.
			new Thread(
					new Runnable(){
						public void run(){
							try{
								Thread.sleep(2000);		// 초기 로딩 시간. 2초간 인트로 화면 보여줌

								// 동의 여부 체크하여 진행 
								if(checkUserAgreed().equals("login")){	// 이전에 동의한 경우 : 다음 프로세스 진행. 

									Log.d(TAG,"agreed checked");
									//  로그인 화면으로 이동 
									intent = new Intent(returnThis(), LoginActivity.class);     		// original
									//									intent = new Intent(IntroActivity.this, CertificationStep1.class);	// for test
									//									intent = new Intent(IntroActivity.this, LoginRegisterChoiceActivity.class);	// for test
									startActivity(intent);
									finish();
								}else if(checkUserAgreed().equals("register")){
									// 무조건 로그인 화면으로 이동. - 선택화면으로.
									intent = new Intent(returnThis(), LoginRegisterChoiceActivity.class);
									startActivity(intent);
									finish();
								}else{			// 이전에 동의 하지 않은 경우 : 동의를 받는다. 사용자 동의 -> 전번인증 -> 다음 단계 는 인트로. MainActivity
									Log.d(TAG,"go for certi step1");
									intent = new Intent(IntroActivity.this, CertificationStep1.class);
									startActivity(intent);
									finish();
								}

							}catch(Exception ie){
								ie.printStackTrace();
								finish();
							}
						}
					}
			).start();
			// 중복 실행 처리	
		}else{				// 이미 실행중.  - 추가적인 창만 그 위에 띄우도록 함.
			count = count -1;
			if(count<0){
				count = 0;
			}
			finish();
		}


	}






	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////	
	// 자체 메소드

	public Context returnThis(){
		return this;
	}

	//	/**
	//	 * pref 에서 자동 로그인 설정 정보를 가져온다.
	//	 * @return
	//	 */
	//	public Boolean checkAutoLogin(){
	//		autoLoginChecked = sharedPrefCustom.getBoolean("autoLoginChecked", false);
	//		autoLoginId = sharedPrefCustom.getString("autoLoginId", "");
	//		return autoLoginChecked;
	//	}


	/**
	 * isRunningProcess
	 *  중복 실행 방지를 위해 카운팅 체크를 한다.
	 *    항상 기동중이기때문에 결과는 true. 
	 * @param context
	 * @param packageName
	 * @return isRunning
	 */
	public static boolean isRunningProcess(Context context, String packageName) {
		boolean isRunning = false;
		ActivityManager actMng = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);   
		List<RunningAppProcessInfo> list = actMng.getRunningAppProcesses();
		for(RunningAppProcessInfo rap : list) {
			//    		Log.e("Log","rap.processName:"+rap.processName+"/packageName:"+packageName);
			if(rap.processName.equals(packageName)) {
				//    			Log.d("Log","packageName=packageName/"+packageName);
				isRunning = true;
				count= count+1;		// 실행중인 수 (중복 실행 방지 용)
				Log.d("Log","count:"+count);
				break;
			}
		}
		return isRunning;
	}


	// 이전에 동의한 적이 있는지 여부를 확인한다.(인증 후라서 동의정보 및 전번까지 저장되있으므로 인증 필요 없음. 전번 저장 되어있음.)
	public String checkUserAgreed(){
		String retVal = "";
		String agreedYn = sharedPrefCustom.getString("agreedYn", "N");		// 동의 했는지 여부
		String registered = sharedPrefCustom.getString("registeredYn", "N");		// 등록 여부
		if(agreedYn.equals("Y")){		// 이전에 동의한 경우
			Log.d(TAG,"already agree");
			if(registered.equals("Y")){
				retVal = "login";		
			}else{
				retVal = "register";
			}
		}else{							// 이전에 동의 안한 경우
			Log.d(TAG,"did not agree");
			retVal = "certi";
		}
		return retVal;
	}
}